package com.example.java_gobang.game.service;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

// 映射已登陆用户位置
@Component
public class OnlineUserManager {

    // 存储用户ID和其对应的 WebSocket 会话的映射（游戏大厅）
    private ConcurrentHashMap<Integer, WebSocketSession> gameHall = new ConcurrentHashMap<>();

    // 存储用户ID和其对应的 WebSocket 会话的映射（游戏房间）
    private ConcurrentHashMap<Integer, WebSocketSession> gameRoom = new ConcurrentHashMap<>();





    /**
     * 用户进入游戏大厅
     * 将用户的 ID 和对应的 WebSocket 会话存储在 gameHall 中
     *
     * @param userId           用户ID
     * @param webSocketSession 用户的 WebSocket 会话
     */
    public void enterGameHall(int userId, WebSocketSession webSocketSession) {
        gameHall.put(userId, webSocketSession);
    }

    /**
     * 用户退出游戏大厅
     * 从 gameHall 中移除用户的 ID 及其对应的 WebSocket 会话
     *
     * @param userId 用户ID
     */
    public void exitGameHall(int userId) {
        gameHall.remove(userId);
    }

    /**
     * 获取用户的 WebSocket 会话（游戏大厅）
     * 根据用户ID从 gameHall 中获取对应的 WebSocket 会话
     *
     * @param userId 用户ID
     * @return 对应的 WebSocket 会话，如果用户不在游戏大厅中则返回null
     */
    public WebSocketSession getFromGameHall(int userId) {
        return gameHall.get(userId);
    }

    /**
     * 用户进入游戏房间
     * 将用户的 ID 和对应的 WebSocket 会话存储在 gameRoom 中
     *
     * @param userId           用户ID
     * @param webSocketSession 用户的 WebSocket 会话
     */
    public void enterGameRoom(int userId, WebSocketSession webSocketSession) {
        gameRoom.put(userId, webSocketSession);
    }

    /**
     * 用户退出游戏房间
     * 从 gameRoom 中移除用户的 ID 及其对应的 WebSocket 会话
     *
     * @param userId 用户ID
     */
    public void exitGameRoom(int userId) {
        gameRoom.remove(userId);
    }

    /**
     * 获取用户的 WebSocket 会话（游戏房间）
     * 根据用户ID从 gameRoom 中获取对应的 WebSocket 会话
     *
     * @param userId 用户ID
     * @return 对应的 WebSocket 会话，如果用户不在游戏房间中则返回null
     */
    public WebSocketSession getFromGameRoom(int userId) {
        return gameRoom.get(userId);
    }
}
